// 引用数据库连接池
const { db } = require('../db/db')
// 解决跨域问题
const cors = require('cors')

// token验证
const jwt = require('jsonwebtoken')
// 生成 token
const gettoken = (uname, time) => {
  const tokenStr = jwt.sign({ uname }, 'chenmy', { expiresIn: time })
  return tokenStr
}
function verifyToken(req, res, next) {
  const authHeader = req.headers['authorization']
  const token = authHeader && authHeader.split(' ')[1]
  // console.log('---------------------------')
  // console.log(token)
  // Token为空，返回401
  if (token == null) return res.sendStatus(401)
  jwt.verify(token, 'chenmy', (err, user) => {
    // console.log(user)
    // console.log(token)
    // Token无效或过期，返回401
    if (err) return res.sendStatus(401)
    req.user = user
    next()
  })
}
//获取当前时间
const date_fns = function () {
  const date_fns = require('date-fns')
  let now = new Date()
  return date_fns.format(now, 'yyyy-MM-dd HH:mm:ss')
}
// console.log(date_fns.format(now, 'yyyy-MM-dd HH:mm:ss'))

// 引用multer插件
const multer = require('multer')
/**
 * multer配置
 * 头像上传文件夹
 *
 */
// 设置保存路径和文件名
const storage = multer.diskStorage({
  destination(req, file, cb) {
    // 设置文件存储路径
    cb(null, './static/touxiang')
  },
  filename(req, file, cb) {
    // 设置文件名
    // Math.round(Math.random() *1E9)是生成一个整数部分9位数的随机数，再取整
    let fileFormat = file.originalname.split('.')
    cb(
      null,
      `${file.fieldname}-${Date.now().toString().slice(4)}${Math.round(
        Math.random() * 1e4
      )}.${fileFormat[fileFormat.length - 1]}`
    )
  },
})

const upload1 = multer({
  storage: storage,
})
/**
 * multer配置
 * 领养宠物图片上传文件夹
 *
 */
// 设置保存路径和文件名
const lingyang = multer.diskStorage({
  destination(req, file, cb) {
    // 设置文件存储路径
    cb(null, './static/lingyang')
  },
  filename(req, file, cb) {
    // 设置文件名
    // Math.round(Math.random() *1E9)是生成一个整数部分9位数的随机数，再取整
    let fileFormat = file.originalname.split('.')
    cb(
      null,
      `${file.fieldname}-${Date.now().toString().slice(4)}${Math.round(
        Math.random() * 1e4
      )}.${fileFormat[fileFormat.length - 1]}`
    )
  },
})

const upload2 = multer({
  storage: lingyang,
})
// 设置救助图片保存路径和文件名
const jiuzhu = multer.diskStorage({
  destination(req, file, cb) {
    // 设置文件存储路径
    cb(null, './static/helps')
  },
  filename(req, file, cb) {
    // 设置文件名
    // Math.round(Math.random() *1E9)是生成一个整数部分9位数的随机数，再取整
    let fileFormat = file.originalname.split('.')
    cb(
      null,
      `${file.fieldname}-${Date.now().toString().slice(4)}${Math.round(
        Math.random() * 1e4
      )}.${fileFormat[fileFormat.length - 1]}`
    )
  },
})
const upload3 = multer({
  storage: jiuzhu,
})

/**
 * multer配置
 * 领养宠物图片上传文件夹
 *
 */
// 设置保存路径和文件名
const lunbotu = multer.diskStorage({
  destination(req, file, cb) {
    // 设置文件存储路径
    cb(null, './static/lunbo')
  },
  filename(req, file, cb) {
    // 设置文件名
    // Math.round(Math.random() *1E9)是生成一个整数部分9位数的随机数，再取整
    let fileFormat = file.originalname.split('.')
    cb(
      null,
      `${file.fieldname}-${Date.now().toString().slice(4)}${Math.round(
        Math.random() * 1e4
      )}.${fileFormat[fileFormat.length - 1]}`
    )
  },
})

const lunbo = multer({
  storage: lunbotu,
})

// 定义返回JSON
const json = {
  success(data, message = 'success') {
    return {
      status: 200,
      message,
      data,
    }
  },
  fail(data, message = '网络连接失败，请稍后重试') {
    return { code: 1, message, data }
  },
}

module.exports = {
  gettoken,
  verifyToken,
  date_fns,
  json,
  cors,
  multer,
  upload1,
  upload2,
  upload3,
  lunbo,
  db,
}
